package com.ebrother.ath.preferences;

import java.io.File;

import org.eclipse.jface.preference.DirectoryFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.ListEditor;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;

import com.ebrother.ath.Activator;

/**
 * This class represents a preference page that is contributed to the
 * Preferences dialog. By subclassing <samp>FieldEditorPreferencePage</samp>, we
 * can use the field support built into JFace that allows us to create a page
 * that is small and knows how to save, restore and apply itself.
 * <p>
 * This page is used to modify preferences only. They are stored in the
 * preference store that belongs to the main plug-in class. That way,
 * preferences can be accessed directly via the preference store.
 */

public class AthPreferencePage extends FieldEditorPreferencePage implements
		IWorkbenchPreferencePage {

	public AthPreferencePage() {
		super(GRID);
		setPreferenceStore(Activator.getDefault().getPreferenceStore());
		setDescription("Android Theme Preferences");
	}

	/**
	 * Creates the field editors. Field editors are abstractions of the common
	 * GUI blocks needed to manipulate various types of preferences. Each field
	 * editor knows how to save and restore itself.
	 */
	public void createFieldEditors() {
		addField(new DirectoryFieldEditor(PreferenceConstants.P_PATH,
				"&Themes Location:", getFieldEditorParent()));
		addField(new ThemeListEditor(PreferenceConstants.P_THEMES,
				"&Theme List:", getFieldEditorParent()));
	}

	@Override
	public void propertyChange(PropertyChangeEvent event) {
		String prefName = ((FieldEditor) event.getSource()).getPreferenceName();
		if (PreferenceConstants.P_PATH.equals(prefName)) {
			File file = new File((String) event.getNewValue());
			String[] files = file.list();
			getPreferenceStore().setValue(PreferenceConstants.P_THEMES,
					getFileString(files));
		}
		super.propertyChange(event);
	}

	private String getFileString(String[] s) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < s.length; i++) {
			if (s[i].endsWith(".ath")) {
				System.out.println(s[i]);
				sb.append(s[i]).append(",");
			}
		}
		if (sb.length() != 0) {
			sb = sb.deleteCharAt(sb.length() - 1);
		}
		System.out.println(sb);
		return sb.toString();
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
	 */
	public void init(IWorkbench workbench) {
	}

	class ThemeListEditor extends ListEditor {
		public ThemeListEditor(String name, String labelText, Composite parent) {
			super(name, labelText, parent);
		}

		@Override
		protected void createControl(Composite parent) {
			super.createControl(parent);
			getAddButton().setVisible(false);
			getRemoveButton().setVisible(false);
			getUpButton().setVisible(false);
			getDownButton().setVisible(false);
		}

		@Override
		protected String createList(String[] s) {
			return getFileString(s);
		}

		@Override
		protected String getNewInputObject() {
			return "";
		}

		@Override
		protected String[] parseString(String s) {
			return s.split(",");
		}
	}
}